package com.arpa.wms.service;

import com.arpa.core.web.Result;
import com.arpa.wms.domain.dto.GoodsUnitDTO;
import com.arpa.wms.domain.dto.GoodsUnitExcelDTO;
import com.arpa.wms.domain.entity.GoodsUnit;
import com.arpa.wms.domain.vo.GoodsUnitExcelVO;
import com.arpa.wms.domain.vo.UnitVO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qimen.api.request.ItemsSynchronizeRequest;
import com.qimen.api.request.SingleitemSynchronizeRequest;

import java.util.List;
import java.util.Map;

/**
 * @author: Allen chen
 * @Date 2020/8/11
 * @Description:
 */
public interface IGoodsUnitService extends IService<GoodsUnit> {

     /**
      *  @author: Allen chen
      *  @Date: 2020/8/11 15:24
      *  @Description: 保存操作
      */
     @Override
    boolean save(GoodsUnit entrty);

     /**
      *  @author: Allen chen
      *  @Date: 2020/8/11 15:24
      *  @Description:根据code更新
      */
    int updateByCode(GoodsUnit entrty);


    /**
     * 查询列表
     * @param brandDTO
     * @return
     */
    List<UnitVO> queryList(GoodsUnitDTO brandDTO);

    /**
     * 查询合计,包含总数
     * @param brandDTO
     * @return
     */
    UnitVO queryListSum(GoodsUnitDTO brandDTO);

     /**
      *  @author: Allen chen
      *  @Date: 2020/8/12 10:45
      *  @Description:批量删除
      */
    int batchDelete(List<String> codes);
 /**
  *  @author: Allen chen
  *  @Date: 2020/8/12 10:46
  *  @Description:批量更新状态
  */
 Map<String,Object> batchUpdateStatus(List<String> codes,String status);

     /**
      *  @author: Allen chen
      *  @Date: 2020/8/26 18:42
      *  @Description: 查询单位列表（新增商品时使用）
      */
    List<UnitVO> queryUnitForGoods(GoodsUnitDTO goodsUnit);

     /**
      *  @author: Allen chen
      *  @Date: 2020/9/1 14:38
      *  @Description: 根据code 批量查询
      */
    List<UnitVO> queryUnitsByCodes(List<String> codes);


    /**
     * 获取货主商品单位列表
     * @param shipmentCode 货主code
     * @return
     */
    List<Map<String, Object>> findUnitByShipmentCode(String shipmentCode);

    /**
     * 通过code删除单位
     * @param codes
     */
    Map<String,Object> removeByCode(List<String> codes);

    /**
     * 模糊查询商品
     * @param keywords 商品单位
     * @param shipmentCode 货主code
     */
    List<Map<String,Object>> search(String keywords, String shipmentCode);

    /**
     * 通过code获取商品单位
     * @param code
     * @return
     */
    GoodsUnit getOneByCode(String code);
     /**
      *  @author: Allen chen
      *  @Date: 2020/11/16 14:22
      *  @Description: 商品导入预览
      */
    List<GoodsUnitExcelVO> goodsUnitExcelView(List<GoodsUnitExcelDTO> list);

     /**
      *  @author: Allen chen
      *  @Date: 2020/11/18 15:14
      *  @Description: 导入单位数据
      */
    Result importUnits (String importCode);

    /**
     * 同步商品时，根据操作类型判断是插入还是更新
     *
     * @param request
     * @param shipmentName
     * @param unitMap
     */
    void batchGoodsUnitSave(ItemsSynchronizeRequest request, String shipmentName, Map<String,String> unitMap);

    /**
     * 同步单个商品时，根据操作类型判断是插入还是更新
     *
     * @param request
     * @param shipmentName
     * @param unitMap
     */
    void singleGoodsUnitSave(SingleitemSynchronizeRequest request, String shipmentName, Map<String,String> unitMap);

}
